package com.test.springboot.jpa.dao;

import com.test.springboot.jpa.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/8/18 2:57
 * @package com.test.springboot.jpa.dao
 * @description 文件说明
 */
@Repository
public interface UserDao extends JpaRepository<User, Long> {

    // ================================== CRUD 方法 ==================================

    // ================================ 自定义简单查询 =================================
    /*
    主要语法：(……代表属性名)
        * findBy……
        * readBy……
        * queryBy……
        * countBy……
    其他关键字：（具体参考文档）
        And
        Or
        Is,Equals
        Between
        ……
     */

    /**
     * 根据密码查询记录
     * @param userPassword 用户密码
     * @return 用户列表
     */
    List<User> findByUserPassword(String userPassword);

    /**
     * 根据密码删除记录
     * @param userPassword 用户密码
     * @return 删除的数目
     */
    void deleteByUserPassword(String userPassword);

    /**
     * 根据密码统计记录
     * @param userPassword 用户密码
     * @return 统计数
     */
    long countByUserPassword(String userPassword);


    // ================================= 自定义 SQL 查询 =================================

    /*
    使用自定义SQL查询用@Query(sql)即可
    如果涉及更新、添加、删除（事务）操作需要再添加@Modifying注解。
    也可以根据需要添加@Transactional注解对事务的支持和、查询超时的设置等。
     */

    /**
     * 根据用户的密码模糊查询：查询以0开头的文件
     * query 的参数，采用Java的entity 实体类
     * @param likePassword
     * @return
     */
    @Query("select u from User u where u.userName like ?1")
    List<User> findByLikePassword(String likePassword);



}
